iT邦幫忙

2024 iThome 鐵人賽

DAY 0
0
自我挑戰組

ASP.NET Core生成網站記錄系列 第 5

DAY5-ADO.NET和ORM(ADO.NET 類別)

  • 分享至 

  • xImage
  •  

ADO.NET 與 Entity Framework CRUD 示範 (以學生表為例)
ADO.NET CRUD 示範

  1. 建立連線與命令:

C#
using System.Data.SqlClient;

// 假設資料庫連接字串為 connectionString
using (SqlConnection connection = new SqlConnection(connectionString))
{
connection.Open();

// 建立命令物件
SqlCommand command = connection.CreateCommand();

}
請謹慎使用程式碼。

  1. CRUD 操作:

新增:

C#
command.CommandText = "INSERT INTO Students (Name, BirthDate) VALUES (@Name, @BirthDate)";
command.Parameters.AddWithValue("@Name", "張三");
command.Parameters.AddWithValue("@BirthDate", new DateTime(2000, 1, 1));
command.ExecuteNonQuery();
請謹慎使用程式碼。

查詢:

C#
command.CommandText = "SELECT * FROM Students";
SqlDataReader reader = command.ExecuteReader();
while (reader.Read())
{
int studentId = (int)reader["StudentId"];
string name = (string)reader["Name"];

}
reader.Close();
請謹慎使用程式碼。

更新:

C#
command.CommandText = "UPDATE Students SET Name = @NewName WHERE StudentId = @Id";
command.Parameters.AddWithValue("@NewName", "李四");
command.Parameters.AddWithValue("@Id", 1);
command.ExecuteNonQuery();
請謹慎使用程式碼。

刪除:

C#
command.CommandText = "DELETE FROM Students WHERE StudentId = @Id";
command.Parameters.AddWithValue("@Id", 1);
command.ExecuteNonQuery();
請謹慎使用程式碼。

Entity Framework ( Code First)CRUD 示範

  1. 建立 DbContext 和實體:

C#
public class StudentContext : DbContext
{
public DbSet Students { get; set; }

protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
    optionsBuilder.UseSqlServer("YourConnectionString");
}

}

public class Student
{
public int StudentId { get; set; }
public string Name { get; set; }
public DateTime BirthDate { get; set; }
}
請謹慎使用程式碼。

  1. CRUD 操作:

新增:

C#
using (var context = new StudentContext())
{
var student = new Student { Name = "王五", BirthDate = new DateTime(2001, 2, 2) };
context.Students.Add(student);
context.SaveChanges();
}
請謹慎使用程式碼。

查詢:

C#
using (var context = new StudentContext())
{
var students = context.Students.Where(s => s.Name.StartsWith("張")).ToList();
}
請謹慎使用程式碼。

更新:

C#
using (var context = new StudentContext())
{
var student = context.Students.FirstOrDefault(s => s.StudentId == 1);
student.Name = "李四";
context.SaveChanges();
}
請謹慎使用程式碼。

刪除:

C#
using (var context = new StudentContext())
{
var student = context.Students.FirstOrDefault(s => s.StudentId == 1);
context.Students.Remove(student);
context.SaveChanges();
}

如果改成DATABASE FIRST只是
建立 DbContext
新增 DbContext 類別: 在您的專案中新增一個繼承自 DbContext 的類別。
配置 DbContext: 在 OnConfiguring 方法中設定資料庫連接字串。
定義 DbSet: 為每個實體類別定義 DbSet 屬性。
C#
using Microsoft.EntityFrameworkCore;

public class SchoolContext : DbContext
{
public DbSet Students { get; set; }

protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
    optionsBuilder.UseSqlServer("Server=your_server;Database=your_database;Trusted_Connection=True;");
}

}

public class Student
{
public int StudentId { get; set; }
public string Name { get; set; }
public DateTime BirthDate { get; set; }
}
請謹慎使用程式碼。

一樣開始操作資料
using (var context = new SchoolContext())
{
// 新增學生
var newStudent = new Student { Name = "王小明", BirthDate = new DateTime(2005, 1, 1) };
context.Students.Add(newStudent);
context.SaveChanges();

// 查詢所有學生
var allStudents = context.Students.ToList();
foreach (var student in allStudents)
{
    Console.WriteLine($"學生 ID: {student.StudentId}, 姓名: {student.Name}, 生日: {student.BirthDate}");
}

// 查詢特定學生
var specificStudent = context.Students.FirstOrDefault(s => s.Name == "王小明");
if (specificStudent != null)
{
    Console.WriteLine($"找到學生: {specificStudent.Name}");
}

// 更新學生資料
specificStudent.Name = "王大明";
context.SaveChanges();

// 刪除學生
context.Students.Remove(specificStudent);
context.SaveChanges();

}

第一段程式碼:Code First
關鍵特徵: YourConnectionString 是一個占位符,表示您需要在運行時提供實際的連接字串。
解釋: 這意味著您首先定義了 C# 類別 (Student 和 StudentContext),然後通過遷移功能生成資料庫。
第二段程式碼:Database First
關鍵特徵: Server=your_server;Database=School;Trusted_Connection=True; 是一個完整的連接字串,指定了特定的伺服器、資料庫和連接方式。
解釋: 這意味著您已經有一個現有的資料庫(School),然後使用反向工程工具根據資料庫結構生成 C# 類別。


上一篇
DAY4-示範一個MVC製作員工通訊錄列表的範例(先有資料表)
下一篇
DAY6-Dapper 與 EF Core
系列文
ASP.NET Core生成網站記錄31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言